/*!
 @header LcbStatistic.h
 @abstract 简单的日志统计插件
 1.统计event,崩溃日志
 2.存放到数据库中
 3.指定服务器地址,上传至服务器中
 @author 刘成彬
 @version 1.0 2016/05/23 Creation
 */


//  0120 - 完成基本功能
//  TODO 定时或者定量上传


#import <Foundation/Foundation.h>
#import "LcbSingleton.h"
/**
 *  返回当前文件,行号,方法名
 *
 *  @param FORMAT 自定义拼接参数
 *  @param ...    多参数
 *
 *  @return 拼接好的字符串
 */
#define LINE_INFO(FORMAT, ...) [NSString stringWithFormat:@"\n[--%@--]\n[--%s--]\n[--%s--]\n[--%d--]\n[--%s--]\n",[NSDateFormatter localizedStringFromDate:[NSDate date] dateStyle:NSDateFormatterLongStyle timeStyle:NSDateFormatterLongStyle],[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String],__FUNCTION__,__LINE__,[[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]]
/*!
 @enum
 @abstract LcbStatisticType
 @constant LcbStatisticAll 所有
 @constant LcbStatisticException 异常
 @constant LcbStatisticEvent 事件
 @constant LcbStatisticUnknown 未知
 */
typedef NS_ENUM(NSUInteger, LcbStatisticType) {
    LcbStatisticUnknown,
    LcbStatisticAll,
    LcbStatisticException,
    LcbStatisticEvent,
};

/*!
 @class
 @abstract 统计类。
 */
@interface LcbStatistic : NSObject

/*!
@property
@abstract 上传log的服务器地址。
*/
@property (nonatomic, copy, readonly)   NSString *serverURLString;
/*!
 @property
 @abstract channel 类型 。
 */
@property (nonatomic, copy, readonly)   NSString *channel;


/// ========================================
/// @name   Methods
/// ========================================
/*!
 @method
 @abstract shareStatistic
 @discussion [self shareStatistic]
 @result id
 */
+ (instancetype)shareStatistic;
/*!
 @method
 @abstract 记录一个事件
 @discussion [self setupServerURLString:@"" channel：@“”]
 @param serverURLString 服务器地址
 @param channel 频道
 @result
 */
+ (void)setupServerURLString:(NSString *)serverURLString channel:(NSString *)channel;


/*!
 @method
 @abstract 记录一个事件
 @discussion [self event:@"eventName"]
 @param name 事件名称
 @result 返回结果
 */

+ (void)event:(NSString *)name;

/*!
 @method
 @abstract 记录一个事件
 @discussion [self event:@"eventName" value:@"event appear view"];
 @param name 事件名称
 @param value 事件的value
 @result 返回结果
 */
+ (void)event:(NSString *)name value:(NSString *)value;

/*!
 @method
 @abstract 记录一个事件
 @discussion [self event:@"eventName" value:@"event appear view" params:@{@"user":@"testUser"}];
 @param name 事件名称
 @param value 事件的value
 @param params 事件额外参数
 @result 返回结果
 */
+ (void)event:(NSString *)name value:(NSString *)value params:(NSDictionary *)params;

/*!
 @method
 @abstract 上传目前数据库内日志内容
 @discussion
 @param statisticType      上传的日志类型
 @param params 事件额外参数
 @result 返回结果
 */

+ (void)uploadStatisticWithType:(LcbStatisticType)statisticType params:(NSMutableDictionary *)params;

@end

